package com.tro.common.util.office;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.commons.io.FileUtils;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.converter.PicturesManager;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.PictureType;

public class DocToHtml {
	/**
	 * 
	* @Title: docToHtml 
	* @Description: TODO(doc 转换成 html) 
	* @param @param fileName
	* @param @param path
	* @param @param imgPath
	* @param @return    设定文件 
	* @return String    返回类型 
	* @throws 
	* @author leeko
	 */
	public static Map<String,Object> docToHtmlRMap(String fileName,String path,String imgPath){
		Map<String,Object> result=new HashMap<String,Object>();
		result.put("html", "转换异常");
		result.put("imgs", new ArrayList<String>());
		try{
			InputStream input = new FileInputStream(path + fileName);
			
			HWPFDocument wordDocument = new HWPFDocument(input);
			WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
					DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
			wordToHtmlConverter.setPicturesManager(new PicturesManager() {
				public String savePicture(byte[] content, PictureType pictureType, String suggestedName, float widthInches,
						float heightInches) {
					return suggestedName;
				}
			});
			wordToHtmlConverter.processDocument(wordDocument);
			List pics = wordDocument.getPicturesTable().getAllPictures();
			if (pics != null) {
				List<String> fileNames=new ArrayList<>();
				for (int i = 0; i < pics.size(); i++) {
					Picture pic = (Picture) pics.get(i);
					try {
						pic.writeImageContent(new FileOutputStream(imgPath + pic.suggestFullFileName()));
						fileNames.add(pic.suggestFullFileName());
					} catch (FileNotFoundException e) {
						e.printStackTrace();
					}
				}
				result.put("imgs", fileNames);
			}
			org.w3c.dom.Document htmlDocument = wordToHtmlConverter.getDocument();
			ByteArrayOutputStream outStream = new ByteArrayOutputStream();
			DOMSource domSource = new DOMSource(htmlDocument);
			StreamResult streamResult = new StreamResult(outStream);
			TransformerFactory tf = TransformerFactory.newInstance();
			Transformer serializer = tf.newTransformer();
			serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
			serializer.setOutputProperty(OutputKeys.INDENT, "yes");
			serializer.setOutputProperty(OutputKeys.METHOD, "html");
			serializer.transform(domSource, streamResult);
			outStream.close();
			String content = new String(outStream.toByteArray());
			result.put("html", content);
		}catch(Exception ex){
			//转换异常，不管了。。。
			ex.printStackTrace();
		}
		return result;
	}
	
	public static String docToHtml(String fileName,String path,String imgPath){
		String content="ERROR_WEIDINGYI";
		try{
			InputStream input = new FileInputStream(path + fileName);
			
			HWPFDocument wordDocument = new HWPFDocument(input);
			WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
					DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
			wordToHtmlConverter.setPicturesManager(new PicturesManager() {
				public String savePicture(byte[] content, PictureType pictureType, String suggestedName, float widthInches,
						float heightInches) {
					return suggestedName;
				}
			});
			wordToHtmlConverter.processDocument(wordDocument);
			List pics = wordDocument.getPicturesTable().getAllPictures();
			if (pics != null) {
				
				for (int i = 0; i < pics.size(); i++) {
					Picture pic = (Picture) pics.get(i);
					try {
						pic.writeImageContent(new FileOutputStream(imgPath + pic.suggestFullFileName()));
						
					} catch (FileNotFoundException e) {
						e.printStackTrace();
					}
				}
				
			}
			org.w3c.dom.Document htmlDocument = wordToHtmlConverter.getDocument();
			ByteArrayOutputStream outStream = new ByteArrayOutputStream();
			DOMSource domSource = new DOMSource(htmlDocument);
			StreamResult streamResult = new StreamResult(outStream);
			TransformerFactory tf = TransformerFactory.newInstance();
			Transformer serializer = tf.newTransformer();
			serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
			serializer.setOutputProperty(OutputKeys.INDENT, "yes");
			serializer.setOutputProperty(OutputKeys.METHOD, "html");
			serializer.transform(domSource, streamResult);
			outStream.close();
			 content = new String(outStream.toByteArray());
			
		}catch(Exception ex){
			//转换异常，不管了。。。
			ex.printStackTrace();
		}
		return content;
	}
	public static void main(String[] args) throws Throwable {
		final String path = "/Users/apple/Desktop/";
		final String file = "可视化系统部署文档.doc";
		//Map<String,Object> content=docToHtml(file,path,"/Users/apple/Desktop/image/");
		//FileUtils.writeStringToFile(new File(path, "人员系分.html"), content.get("html").toString(), "utf-8");
	}

}
